home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C++ / Code Resources / Windows 95 MDEF / Sourcery / GetDominantDevice.c < prev    next >
C/C++ Source or Header  |  1995-11-29  |  2KB  |  69 lines

  1. #include "GetDominantDevice.h"
  2.  
  3. static Boolean IsActiveScreenDevice(GDHandle theDevice);
  4. static long GetRectArea(Rect r);
  5.  
  6. // ---------------------------------------------------------------------------
  7.  
  8. /*
  9.     The following routines were written by Norman Basham.
  10.     They were taken from "Monitors.cpp"
  11.     
  12.     Thanks a mil, Norman!
  13. */
  14. #pragma mark === Norman Basham ===
  15.  
  16. //    ------------------------------------------------------------------------
  17. //    Given rect r, which device does it overlap most.  An example of its use
  18. //    would be passing in (**wp->visRgn).rgnBBox to find out which device a
  19. //    window is overlapping the most, as in the case of zooming a window.
  20. //    ------------------------------------------------------------------------
  21. GDHandle GetDominantDevice (Rect *r)
  22. {
  23.     GDHandle            aGDevice;
  24.     GDHandle            bigGDevice;
  25.     Rect                screenRect;
  26.     Rect                sectRect;
  27.     long                area;
  28.     long                biggestArea = 0L;
  29.  
  30.     aGDevice = GetDeviceList ();                        //    start at begining of device list
  31.     while (aGDevice != nil)                                //    loop if device exists
  32.         {
  33.         if (IsActiveScreenDevice (aGDevice))            //    if device is a monitor and active
  34.             {
  35.             screenRect = (**aGDevice).gdRect;            //    get the devices global rect
  36.             SectRect (&screenRect, r, §Rect);        //    get overlapping rect of device and r
  37.             
  38.             area = GetRectArea (sectRect);                //    changed 3/21/94
  39.             if (area > biggestArea)                        //    if overlapping rect has the biggest area
  40.                 {
  41.                 bigGDevice = aGDevice;                    //    set big device to current device
  42.                 biggestArea = area;                        //    set big area to current area
  43.                 }
  44.     
  45.             aGDevice = GetNextDevice (aGDevice);        //    check next device in list
  46.             }
  47.         }
  48.         
  49.     return bigGDevice;                                    //    return device containing biggest portion of r
  50. }
  51.  
  52. //    ------------------------------------------------------------------------
  53. //    Given a device, return wether it is a monitor and wether it's active
  54. //    ------------------------------------------------------------------------
  55. Boolean IsActiveScreenDevice(GDHandle theDevice)
  56. {
  57.     return (
  58.             (TestDeviceAttribute (theDevice, screenDevice)) &&
  59.             (TestDeviceAttribute (theDevice, screenActive))
  60.             );
  61. }
  62.  
  63. long GetRectArea(Rect r)
  64. {
  65.     Rect        temp = r;
  66.  
  67.     OffsetRect (&temp, -temp.left, -temp.top);        //    rids us of neg values
  68.     return (long) temp.right * temp.bottom;            //    return width x heigth
  69. }